package com.zyf.chapter02.behavior.iterator.snapshot;

/**
 * 接口定义范式一 ，基于接口而非实现编程<br/>
 * 相对于第二种 {@link InteratorTwo}，第一种定义方式更加灵活,可以多次调用 currentItem 查询当前元素，而不移动游标。
 * @see InteratorTwo
 * @author yifeng
 */
public interface Iterator<E> {
    boolean hasNext();

    /**
     * 用来将游标后裔一位元素
     */
    void next();

    /**
     * 返回当前游标指向的元素,可以多次调用该方法，而不移动游标
     */
    E currentItem();

    /**
     * 第二种定义方式
     */
    public interface InteratorTwo<E> {
        boolean hasNext();

        /**
         * 返回当前元素与后移一位这两个操作要放到同一个函数 next() 中完成
         */
        E next();
    }
}
